www.gusucode.com > 基于matlab的GUI界面的语音信号端点标定源码程序 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/tx_radon_hurwitz.m

    function ofdm_syms_out = tx_radon_hurwitz(mod_ofdm_syms,SimulationParameters)

global SimulationConstants;

%if there is zeropad option
if SimulationParameters.ZeroPad
    num_symbols = length(mod_ofdm_syms)/sum(SimulationConstants.NumDataSubc);
    mod_syms = reshape(mod_ofdm_syms, sum(SimulationConstants.NumDataSubc), num_symbols);
else
    num_symbols = length(mod_ofdm_syms)/SimulationParameters.FFTPoints;
    mod_syms = reshape(mod_ofdm_syms, SimulationParameters.FFTPoints, num_symbols);
end

if SimulationParameters.TxDiv==2
    
    %if there is zeropad option
    if SimulationParameters.ZeroPad
        ant1_syms = zeros(sum(SimulationConstants.NumDataSubc), num_symbols);
        ant2_syms = zeros(sum(SimulationConstants.NumDataSubc), num_symbols);
    else
        ant1_syms = zeros(SimulationParameters.FFTPoints, num_symbols);
        ant2_syms = zeros(SimulationParameters.FFTPoints, num_symbols);
    end

% unchanged symbols
ant1_syms(:,1:2:num_symbols) = mod_syms(:,1:2:num_symbols);
ant2_syms(:,1:2:num_symbols) = mod_syms(:,2:2:num_symbols);

% transformed symbols
ant1_syms(:,2:2:num_symbols) = -conj(mod_syms(:,2:2:num_symbols));
ant2_syms(:,2:2:num_symbols) = conj(mod_syms(:,1:2:num_symbols));

ofdm_syms_out = zeros(2, length(mod_ofdm_syms));

ofdm_syms_out(1,:) = ant1_syms(:).';
ofdm_syms_out(2,:) = ant2_syms(:).';

elseif SimulationParameters.TxDiv==4

%if there is zeropad option    
if SimulationParameters.ZeroPad    
    %make the number of columns a multiple of 8
while rem(num_symbols,4)~=0
    temp=zeros(sum(SimulationConstants.NumDataSubc),1);
    mod_syms=[mod_syms temp];
    num_symbols=num_symbols+1;
end
ant1_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols);
ant2_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols);
ant3_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols);
ant4_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols);

else
%make the number of columns a multiple of 8
while rem(num_symbols,4)~=0
    temp=zeros(SimulationParameters.FFTPoints,1);
    mod_syms=[mod_syms temp];
    num_symbols=num_symbols+1;
end
ant1_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols);
ant2_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols);
ant3_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols);
ant4_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols);
end
% unchanged symbols 
ant1_syms(:,1:8:2*num_symbols) = mod_syms(:,1:4:num_symbols);
ant2_syms(:,1:8:2*num_symbols) = mod_syms(:,2:4:num_symbols);
ant3_syms(:,1:8:2*num_symbols) = mod_syms(:,3:4:num_symbols);
ant4_syms(:,1:8:2*num_symbols) = mod_syms(:,4:4:num_symbols);

% transformed symbols
ant1_syms(:,2:8:2*num_symbols) = -mod_syms(:,2:4:num_symbols);
ant2_syms(:,2:8:2*num_symbols) =  mod_syms(:,1:4:num_symbols);
ant3_syms(:,2:8:2*num_symbols) = -mod_syms(:,4:4:num_symbols);
ant4_syms(:,2:8:2*num_symbols) = mod_syms(:,3:4:num_symbols);

ant1_syms(:,3:8:2*num_symbols) = -mod_syms(:,3:4:num_symbols);
ant2_syms(:,3:8:2*num_symbols) =  mod_syms(:,4:4:num_symbols);
ant3_syms(:,3:8:2*num_symbols) =  mod_syms(:,1:4:num_symbols);
ant4_syms(:,3:8:2*num_symbols) = -mod_syms(:,2:4:num_symbols);

ant1_syms(:,4:8:2*num_symbols) = -mod_syms(:,4:4:num_symbols);
ant2_syms(:,4:8:2*num_symbols) = -mod_syms(:,3:4:num_symbols);
ant3_syms(:,4:8:2*num_symbols) =  mod_syms(:,2:4:num_symbols);
ant4_syms(:,4:8:2*num_symbols) =  mod_syms(:,1:4:num_symbols);

ant1_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols));
ant2_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,2:4:num_symbols));
ant3_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,3:4:num_symbols));
ant4_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,4:4:num_symbols));

ant1_syms(:,6:8:2*num_symbols) = -conj(mod_syms(:,2:4:num_symbols));
ant2_syms(:,6:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols));
ant3_syms(:,6:8:2*num_symbols) = -conj(mod_syms(:,4:4:num_symbols));
ant4_syms(:,6:8:2*num_symbols) = conj(mod_syms(:,3:4:num_symbols));

ant1_syms(:,7:8:2*num_symbols) = -conj(mod_syms(:,3:4:num_symbols));
ant2_syms(:,7:8:2*num_symbols) = conj(mod_syms(:,4:4:num_symbols));
ant3_syms(:,7:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols));
ant4_syms(:,7:8:2*num_symbols) = -conj(mod_syms(:,2:4:num_symbols));

ant1_syms(:,8:8:2*num_symbols) = -conj(mod_syms(:,4:4:num_symbols));
ant2_syms(:,8:8:2*num_symbols) = -conj(mod_syms(:,3:4:num_symbols));
ant3_syms(:,8:8:2*num_symbols) = conj(mod_syms(:,2:4:num_symbols));
ant4_syms(:,8:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols));

ofdm_syms_out = zeros(4, length(ant1_syms(:).'));

ofdm_syms_out(1,:) = ant1_syms(:).';
ofdm_syms_out(2,:) = ant2_syms(:).';
ofdm_syms_out(3,:) = ant3_syms(:).';
ofdm_syms_out(4,:) = ant4_syms(:).';

end